import sqlite3 from '@vscode/sqlite3'
import { app } from 'electron'
import { dirname, join } from 'path'
import fs from 'fs'
import log from 'electron-log'
import { initTable, initData } from './init'

// 计算数据库基准目录：
// - 开发环境：项目根目录（可写）
// - 生产环境（已打包）：安装目录根（dirname(process.execPath)）
const baseDir = app.isPackaged ? dirname(process.execPath) : app.getAppPath()

const databasePathFromEnv = process.env.MAIN_VITE_DATABASE_URL
log.info('数据库连接地址:', databasePathFromEnv)
const relativeDbPath = databasePathFromEnv
  ? databasePathFromEnv.replace(/^\/+/, '') // 去掉开头的 /，确保是相对路径
  : 'db/database.sqlite'

// 最终数据库文件路径（相对于 baseDir）
const dbPath = join(baseDir, relativeDbPath)
log.info('数据库路径:', dbPath)

// 确保所在目录存在
const dbDir = join(dbPath, '..')
if (!fs.existsSync(dbDir)) {
  log.info('创建 db 目录...')
  fs.mkdirSync(dbDir, { recursive: true })
}

// 启用详细日志
sqlite3.verbose()
// const db = null;

const db = new sqlite3.Database(dbPath, (err) => {
  if (err) {
    log.error('数据库连接失败:', err)
    return
  }
})
// 初始化数据库表
db.serialize(() => {
  // 执行 ./init.sql
  initTable.forEach((sql) => {
    log.info('初始化执行 SQL:', sql)
    db.run(sql)
  })
  // db.run(initData)
  log.info('数据库初始表完成')
})

// 处理进程退出时关闭数据库连接
process.on('exit', () => {
  db.close((err) => {
    if (err) {
      log.error('关闭数据库失败:', err)
    }
  })
})

export default db
